/*
 * C/C++ KLIB Project
 * 
 * Copyright (c) 2012 Ken Zhang (cpp.china@gmail.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA  02111-1307  USA
 *
 */


#include "klib.h"

char *itostr(char *buffer, int value, int radix, int width)
{
	const static char numbers[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	unsigned int u;
	int i = 0;

	if (radix >= 2 && radix <= 36 && width <= 32) {
		if (radix == 10 && value < 0) {
			u = -value;
		}
		else {
			u = (unsigned int)value;
		}

		while (u) {
			buffer[i++] = numbers[u % radix];
			u /= radix;
		}

		while (i < width) {
			buffer[i++] = '0';
		}

		if (radix == 10 && value < 0) {
			buffer[i++] = '-';
		}

		buffer[i] = '\0';
		reverse(buffer);
		return buffer;
	}

	return NULL;
}
